/*
 * iSala.cpp
 *
 *  Created on: 05/07/2014
 *      Author: nicolas
 */

#include "iSala.h"
#include <syslog.h>
#include <stdio.h>

iSala::iSala(int numero, int id) {
	this->id = id;
	this->numero = numero;
	this->colaSistema = new ColaMensajes(RUTA, COLASISTEMA);
	this->colaRespuesta = new ColaInterfaz(RUTA, COLARECIBO_CLI);
}

void iSala::hacerCola(enum Tipos::LugarDeSala destinatario) {
	long int idSala = rpc.pedirIdSala(numero, Tipos::TP_ENTRADA_COLA,
			destinatario);
//	long int idSala = idServer.idSala(numero, Tipos::TP_ENTRADA_COLA,
//			destinatario);
	MENSAJE msg;
	msg.destinatario = id;
	msg.destinatarioFinal = idSala;
	msg.origen = id;
	msg.tipo = Tipos::MSJ_ENTRAR_COLA_DE_SALA;
	colaSistema->enviar(&msg, TAM_MENSAJE);
	syslog(LOG_INFO,
			"Se envio el mensaje: destinatario: %li, origen: %li, id: %i, respuesta: %i",
			msg.destinatario, msg.origen, msg.id, msg.respuesta);
}

void iSala::recibirPermiso() {
	MENSAJE msg;

	//colaRespuesta->recibir(&msg, TAM_MENSAJE, id);
	colaRespuesta->recibirMensaje(msg, Tipos::MSJ_ENTRAR_EN_SALA, id);

	if (msg.tipo != Tipos::MSJ_ENTRAR_EN_SALA)
		syslog(LOG_ERR,
				"Error de tipo de mensaje esperado, esperado: %i, recibido: %i",
				(int) Tipos::MSJ_ENTRAR_EN_SALA, (int) msg.tipo);
	syslog(LOG_INFO,
			"Se recibio el mensaje: destinatario: %li, origen: %li, id: %i, respuesta: %i",
			msg.destinatario, msg.origen, msg.id, msg.respuesta);
}

void iSala::confirmarIngreso(enum Tipos::LugarDeSala destinatario) {
	long int idSala = rpc.pedirIdSala(numero, Tipos::TP_ENTRADA_SALA,
			destinatario);
//	long int idSala = idServer.idSala(numero, Tipos::TP_ENTRADA_SALA,
//			destinatario);
	MENSAJE msg;
	msg.destinatario = id;
	msg.destinatarioFinal = idSala;
	msg.origen = id;
	msg.tipo = Tipos::MSJ_CONFIRMAR_ENTRADA_A_SALA;
	colaSistema->enviar(&msg, TAM_MENSAJE);
	syslog(LOG_INFO,
			"Se envio el mensaje: destinatario: %li, origen: %li, id: %i, respuesta: %i",
			msg.destinatario, msg.origen, msg.id, msg.respuesta);
}

void iSala::recibirPermisoSubirBus() {
	MENSAJE msg;
	//colaRespuesta->recibir(&msg, TAM_MENSAJE, id);
	colaRespuesta->recibirMensaje(msg, Tipos::MSJ_SUBIR_PERSONA_A_BUS , id);

	if (msg.tipo != Tipos::MSJ_SUBIR_PERSONA_A_BUS)
		syslog(LOG_ERR,
				"Error de tipo de mensaje esperado, esperado: %i, recibido: %i",
				(int) Tipos::MSJ_SUBIR_PERSONA_A_BUS, (int) msg.tipo);
	syslog(LOG_INFO,
			"Se recibio el mensaje: destinatario: %li, origen: %li, id: %i, respuesta: %i",
			msg.destinatario, msg.origen, msg.id, msg.respuesta);
}

void iSala::confirmarSubidaBus(enum Tipos::LugarDeSala destinatario) {
	long int idSala = rpc.pedirIdSala(numero, Tipos::TP_SALIDA, destinatario);
//	long int idSala = idServer.idSala(numero, Tipos::TP_SALIDA, destinatario);
	MENSAJE msg;
	msg.destinatario = id;
	msg.destinatarioFinal = idSala;
	msg.origen = id;
	msg.tipo = Tipos::MSJ_CONFIRMAR_SUBIDA_A_BUS;
	colaSistema->enviar(&msg, TAM_MENSAJE);
	syslog(LOG_INFO,
			"Se envio el mensaje: destinatario: %li, origen: %li, id: %i, respuesta: %i",
			msg.destinatario, msg.origen, msg.id, msg.respuesta);
}
